#!/usr/bin/env python3
# -*- coding: utf-8 -*-

# File: data_download.py
# Date: 2024/7/4
# Author: 抖音、快手、视频号：东哥策略交易，微信：dongtrader
# Description: 东哥量化，带你走上量化之路。

from __future__ import (absolute_import, division, print_function,
                        unicode_literals)

import time

import backtrader_tools as st




if __name__ == '__main__':
    print("欢迎使用东哥量化工具箱\n关注各平台@东哥量化\n东哥量化，带你走上量化之路。\n")
    print("""
        一股一仓，批量回测： 用于多股票批量测试策略的收益情况，每个股票独立资金账户，互不影响。可多策略进行回测，同股票同时间比较策略的优劣，多股批量能平衡策略的稳定性。
        same_test(code=None,sdate=None,days=365,stk_num = 1)

        不填写参数，默认随机1个股票、随机开始时间，回测周期为365天
        :param MyStrategy: str类型，回测策略（必填参数）,填写策略名。需要进行多策略同时回测的把策略装进列表里。
        :param code: int/str/list类型，回测股票号码格式，
                        int:602253、230(000230);
                        str:'600236'、'230'、'600236_sh'、'600236.sh'、'600236sh'、'sh600236'、'sh.600236'
                        list:[602253,230,'600236','230','600236_sh','600236.sh','600236sh','sh600236','sh.600236']

        :param stk_num: int类型，回测股票数量，默认为1
        :param sdate: list/int类型，可以为：[年（int）,月（int）,日（int）]，也可以为：2022（年int），默认为根据股票日期范围内随机，修改设置按固定日期回测。
        :param days: ist类型，回测周期长度，以天为单位，默认为365天


        单/多股一仓回测： 可以进行单个股票或多股票进行回测，回测使用同一资金账户。当已经持仓，没有资金的情况下，其它股票出现买入信号也不会进行交易。模拟正常交易情况。
        separate_test(stk_num=10,date=[2020,1,1],day=365)

        不填写参数，默认随机10个股票、每个股票随机开始时间，回测周期为365天
        :param MyStrategy: str类型，回测策略（必填参数）,填写策略名。
        :param stk_num: int类型，回测股票数量，默认为10
        :param sdate: list/int类型，可以为：[年（int）,月（int）,日（int）]，也可以为：2022（年int），默认为根据股票日期范围内随机，修改设置按固定日期回测。
        :param days: ist类型，回测周期长度，以天为单位，默认为365天
    """)
    start_time = time.time()
    print(f'程序开始运行时间：{start_time}')
    while True:
        try:
            num_input = int(input("\n请选择(数字):\n1. 单/多股一仓回测\n2. 一股一仓，批量回测\n3. 退出\n"))
        except:
            print("输入错误，请重新输入")
            continue
        if num_input == 1:
            strategy = input("请输入策略名：")
            while True:
                try:
                    code = input("请输入股票代码(数字)：")
                    int(code)
                    break
                except:
                    print("输入错误，请重新输入")
            while True:
                try:
                    days = input("请输入回测周期(数字)：")
                    int(days)
                    break
                except:
                    print("输入错误，请重新输入")
            # 单/多股一仓回测
            st.same_test(strategy,code=code,days=days)
        elif num_input == 2:
            strategy = input("请输入策略名：")
            while True:
                try:
                    stock_num = input("请输入回测股票数量(数字)：")
                    int(stock_num)
                    break
                except:
                    print("输入错误，请重新输入")
            while True:
                try:
                    days = input("请输入回测周期(数字)：")
                    int(days)
                    break
                except:
                    print("输入错误，请重新输入")
            # 一股一仓，批量回测
            st.separate_test(strategy,stock_num=stock_num, days=days)
        elif num_input == 3:
            break
        else:
            print("输入错误，请重新输入")

    end_time = time.time()
    print(f'程序运行时间：{end_time - start_time}s')